From: kaf24@firebug.cl.cam.ac.uk Date: Wed, 28 Sep 2005 13:07:25 +0000 (+0100) Subject: imported patch ../tmp/fix_free_monitor_pagetable.patch X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~16769^2~16^2~17^2~4 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=82c66523be98425df658f4acf77c8cba355ba3e4;p=xen.git imported patch ../tmp/fix_free_monitor_pagetable.patch --- diff --git a/xen/arch/x86/shadow32.c b/xen/arch/x86/shadow32.c index 796767132c..4b2a417c25 100644 --- a/xen/arch/x86/shadow32.c +++ b/xen/arch/x86/shadow32.c @@ -755,9 +755,13 @@ void free_monitor_pagetable(struct vcpu *v) /* * Then free monitor_table. + * Note: for VMX guest, only BSP need do this free. */ - mfn = pagetable_get_pfn(v->arch.monitor_table); - free_domheap_page(&frame_table[mfn]); + if (!(VMX_DOMAIN(v) && v->vcpu_id)) { + mfn = pagetable_get_pfn(v->arch.monitor_table); + unmap_domain_page(v->arch.monitor_vtable); + free_domheap_page(&frame_table[mfn]); + } v->arch.monitor_table = mk_pagetable(0); v->arch.monitor_vtable = 0; diff --git a/xen/arch/x86/shadow_public.c b/xen/arch/x86/shadow_public.c index 771e8d0fc1..fad54a7f97 100644 --- a/xen/arch/x86/shadow_public.c +++ b/xen/arch/x86/shadow_public.c @@ -256,14 +256,16 @@ void free_monitor_pagetable(struct vcpu *v) { unsigned long mfn; -// ASSERT( pagetable_val(v->arch.monitor_table) ); + ASSERT( pagetable_val(v->arch.monitor_table) ); /* * free monitor_table. + * Note: for VMX guest, only BSP need do this free. */ - //mfn = (pagetable_val(v->arch.monitor_table)) >> PAGE_SHIFT; - mfn = pagetable_get_pfn(v->arch.monitor_table); - unmap_domain_page(v->arch.monitor_vtable); - free_domheap_page(&frame_table[mfn]); + if (!(VMX_DOMAIN(v) && v->vcpu_id)) { + mfn = pagetable_get_pfn(v->arch.monitor_table); + unmap_domain_page(v->arch.monitor_vtable); + free_domheap_page(&frame_table[mfn]); + } v->arch.monitor_table = mk_pagetable(0); v->arch.monitor_vtable = 0; } @@ -358,9 +360,13 @@ void free_monitor_pagetable(struct vcpu *v) /* * Then free monitor_table. + * Note: for VMX guest, only BSP need do this free. */ - mfn = pagetable_get_pfn(v->arch.monitor_table); - free_domheap_page(&frame_table[mfn]); + if (!(VMX_DOMAIN(v) && v->vcpu_id)) { + mfn = pagetable_get_pfn(v->arch.monitor_table); + unmap_domain_page(v->arch.monitor_vtable); + free_domheap_page(&frame_table[mfn]); + } v->arch.monitor_table = mk_pagetable(0); v->arch.monitor_vtable = 0;